package com.ys.service.news.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ys.dto.AddDto;
import com.ys.dto.DtreeSqlDto;
import com.ys.entity.news.NewsItem;
import com.ys.enume.news.NewsItemEnum;
import com.ys.mapper.news.NewsItemMapper;
import com.ys.service.news.NewsItemService;
import com.ys.vo.R;

@Service("newsItemService")
public class NewsItemServiceImpl implements NewsItemService {
	
	@Autowired
	private NewsItemMapper newsItemMapper;

	@Override
	public DtreeSqlDto dtree() {
		
		DtreeSqlDto.StatusDto status = DtreeSqlDto.StatusDto.init(200, "");

		List<DtreeSqlDto.DataDto> data = new ArrayList<DtreeSqlDto.DataDto>();
		List<NewsItem> listYsMenu = new NewsItem()
				.setOrderby("A.Lev asc, A.SortNo asc")
				.queryList();
		
		// 一级菜单
		for(NewsItem item1 : listYsMenu) {
			if (item1.getLev() != NewsItemEnum.Lev.ONE.value) {
				continue;
			}
			String id1 = item1.getId().toString();
			String title1 = item1.getName();
			String parentId1 = item1.getPid().toString();
			
			// 二级菜单
			List<DtreeSqlDto.DataDto> children = new ArrayList<DtreeSqlDto.DataDto>();
			for (NewsItem item2 : listYsMenu) {
				if (item2.getLev() != NewsItemEnum.Lev.TWO.value || item2.getPid().longValue() != item1.getId().longValue()) {
					continue;
				}
				String id2 = item2.getId().toString();
				String title2 = item2.getName();
				String parentId2 = item2.getPid().toString();
				
				// 三级菜单
				List<DtreeSqlDto.DataDto> children1 = new ArrayList<DtreeSqlDto.DataDto>();
				for(NewsItem item3 : listYsMenu) {
					if (item3.getLev() != NewsItemEnum.Lev.THREE.value || item3.getPid().longValue() != item2.getId().longValue()) {
						continue;
					}
					String id3 = item3.getId().toString();
					String title3 = item3.getName();
					String parentId3 = item3.getPid().toString();

					List<DtreeSqlDto.DataDto> children2 = new ArrayList<DtreeSqlDto.DataDto>();
					DtreeSqlDto.DataDto dataDto3 = new DtreeSqlDto.DataDto(id3, title3, parentId3, DtreeSqlDto.DataDto.initCheckArr(null), children2);
					children1.add(dataDto3);
				}
				
				DtreeSqlDto.DataDto dataDto2 = new DtreeSqlDto.DataDto(id2, title2, parentId2, DtreeSqlDto.DataDto.initCheckArr(null), children1);
				children.add(dataDto2);
			}
			
			DtreeSqlDto.DataDto dataDto1 = new DtreeSqlDto.DataDto(id1, title1, parentId1, DtreeSqlDto.DataDto.initCheckArr(null), children);
			data.add(dataDto1);
		}
		return new DtreeSqlDto(status, data);
	}
	
	@Override
	@Transactional
	public R add(Map<String, Object> params, Long menuId) throws Exception {
		
		NewsItem entity = JSON.parseObject(JSON.toJSONString(params), NewsItem.class);
		
		if (entity.getPid().longValue() == 0L) {
			entity.setLev(1);
		} else {
			NewsItem entityP = new NewsItem().setId(entity.getPid()).queryFirst();
			entity.setLev(entityP.getLev() + 1);
		}
		
		entity.setStatus(1);
		
		newsItemMapper.insert(entity);
		
		return R.ok(AddDto.closeAndReload());
	}
	
	@Override
	@Transactional
	public R edit(Map<String, Object> params) throws Exception {
		NewsItem entity = JSON.parseObject(JSON.toJSONString(params), NewsItem.class);
		
		newsItemMapper.update(entity);
		return R.ok("操作成功");
	}

	@Override
	public R deleteTrue(Long id) throws Exception {
		if (id == null) {
			return R.error("ID不能为空");
		}
		
		newsItemMapper.deleteTrue(id);
		return R.ok();
	}

	@Override
	@Transactional
	public R resort(String rows) {
		JSONArray JA = JSON.parseArray(rows);
		
		for (int i = 0; i < JA.size(); i++) {
			JSONObject JO = JA.getJSONObject(i);
			Long id = JO.getLong("id");
			Integer sortNo = i + 1;
			
			NewsItem newsItem = new NewsItem().setId(id).queryFirst();
			newsItem.setSortNo(sortNo);
			newsItemMapper.update(newsItem);
		}
		return R.ok();
	}
}
